package com.spic.system.service.impl;

import com.spic.common.security.utils.cache.DataScopeCacheUtils;
import com.spic.system.api.dto.DataScopeDTO;
import com.spic.system.domain.SysDatascope;
import com.spic.system.mapper.SysDatascopeMapper;
import com.spic.system.service.ISysDatascopeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.List;

/**
 * 数据权限Service业务层处理
 *
 * @author spic
 * @date 2022-01-05
 */
@Service
public class SysDatascopeServiceImpl implements ISysDatascopeService
{
    @Autowired
    private SysDatascopeMapper sysDatascopeMapper;


    /**
     * 项目启动时，初始化数据权限到缓存
     */
    @PostConstruct
    public void init()
    {
        loadingDataScopeCache();
    }

    //加载数据权限缓存
    @Override
    public void loadingDataScopeCache() {
        List<DataScopeDTO> dataScopeDTOS = sysDatascopeMapper.listDataScopes();
        DataScopeCacheUtils.setCache(dataScopeDTOS);
    }

    /**
     * 重置数据权限缓存数据
     */
    public void resetDataScopeCache()
    {
        DataScopeCacheUtils.clearCache();
        loadingDataScopeCache();
    }

    /**
     * 查询数据权限
     *
     * @param id 数据权限主键
     * @return 数据权限
     */
    @Override
    public SysDatascope selectSysDatascopeById(Long id)
    {
        return sysDatascopeMapper.selectSysDatascopeById(id);
    }

    /**
     * 查询数据权限列表
     *
     * @param sysDatascope 数据权限
     * @return 数据权限
     */
    @Override
    public List<SysDatascope> selectSysDatascopeList(SysDatascope sysDatascope)
    {
        return sysDatascopeMapper.selectSysDatascopeList(sysDatascope);
    }

    @Override
    public SysDatascope selectByItem(SysDatascope sysDatascope)
    {
        return sysDatascopeMapper.selectByItem(sysDatascope);
    }

    /**
     * 新增数据权限
     *
     * @param sysDatascope 数据权限
     * @return 结果
     */
    @Override
    public int insertSysDatascope(SysDatascope sysDatascope)
    {
        int row = sysDatascopeMapper.insertSysDatascope(sysDatascope);
        resetDataScopeCache();
        return row;
    }

    /**
     * 修改数据权限
     *
     * @param sysDatascope 数据权限
     * @return 结果
     */
    @Override
    public int updateSysDatascope(SysDatascope sysDatascope)
    {
        int row = sysDatascopeMapper.updateSysDatascope(sysDatascope);
        resetDataScopeCache();
        return row;
    }

    /**
     * 批量删除数据权限
     *
     * @param ids 需要删除的数据权限主键
     * @return 结果
     */
    @Override
    public int deleteSysDatascopeByIds(Long[] ids)
    {
        int row = sysDatascopeMapper.deleteSysDatascopeByIds(ids);
        resetDataScopeCache();
        return row;
    }

    /**
     * 删除数据权限信息
     *
     * @param id 数据权限主键
     * @return 结果
     */
    @Override
    public int deleteSysDatascopeById(Long id)
    {
        int row = sysDatascopeMapper.deleteSysDatascopeById(id);
        resetDataScopeCache();
        return row;
    }


}
